﻿namespace FibMatrix
{
    /// <summary>
    /// 表示一个可加载资源的运行时数据，也就是BundleResources目录下的文件
    /// 每个资源有唯一的AbstractLoadItem
    /// </summary>
    [FM_Mono.IgnoreGen]
    public abstract class AbstractLoadItem
    {
        public AbstractLoadItem(string assetId)
        {
            itemID = assetId;
            objRefCount = 0;
        }

        /// <summary>
        /// 资源id，assetNode的id
        /// </summary>
        public string itemID { get; private set; }

        /// <summary>
        /// 资源和实例的计数，在异步过程中会增减计数，资源管理内部会对资源有1个计数，每个外部请求或实例化都会+1
        /// 以prefab举例，改计数顺序为
        /// 1. 开始异步加载过程（pipeline） +1，
        /// 2. load(Async)AssetPipe +1， 对应外部每个请求
        /// 3. 结束异步加载过程（pipeline） -1
        /// 4. 开始异步实例化过程 +1
        /// 5. 资源完成回调 +1
        /// 6. 回调过程中实例化 +1，紧接着Destroy -1，估计是不想在这增计数
        /// 7. 结束异步实例化过程 -1
        /// 此时计数为2，表示内部1+外部1。如果基于实例化对象再实例化还会增1，
        /// 对非prefab，没有实例化步骤，计数结果也是2
        /// </summary>
        public int objRefCount;

        public IUAssetLoadHandle assetHandle;
        public bool instanceIDAquired = false;  // 是否记录了这个资源的实例id
        public int instanceID = -1; // 加载进来资源的id，实例化对象的id与之不同
        public double destoryTime;
        /// <summary>
        /// 是否处于回收列表中
        /// </summary>
        public bool inRecycle = false;
        public AbstractLoadItem next;
    }
}